// 一
const fp = require('lodash/fp')
const cars = [{
        name: 'Ferrari FF',
        horsepower: 660,
        dollar_value: 700000,
        in_stock: true
    },
    {
        name: 'Spyker C12 Zagato',
        horsepower: 650,
        dollar_value: 648000,
        in_stock: false
    },
    {
        name: 'Jaguar XKR-S',
        horsepower: 550,
        dollar_value: 132000,
        in_stock: false
    },
    {
        name: 'Audi R8',
        horsepower: 525,
        dollar_value: 114200,
        in_stock: false
    },
    {
        name: 'Aston Martin One-77 ',
        horsepower: 750,
        dollar_value: 1850000,
        in_stock: true
    },
    {
        name: 'Pagani Huayra',
        horsepower: 700,
        dollar_value: 1300000,
        in_stock: false
    },
]
// 使用函数组合 fp.flowRight ()重新实现下面这个函数
// ```js
// let isLastInStock = function (res) {
//     // 获取最后一条数据
//     let last_car = fp.last(cars)
//     // 获取最后一条数据的in_stock属性值
//     return fp.prop('in_stock', last_car)
// }
const getInStock = fp.prop('in_stock')
// 从右向左执行 先获取最后元素，在获取in_stock
let isLastInStock = fp.flowRight(getInStock, fp.last)
let res1 = isLastInStock(cars)
console.log(res1) //false

//  练习2 使用fp.flowRight()、fp.prop()、fp.first()获取第一个car的name


// let res = fp.flowRight(fp.prop('name'), fp.first)(cars) //Ferrari FF
const getName = fp.prop('name')
// 从右向左执行 先获取第一个元素，在获取name
let getFirstName = fp.flowRight(getName, fp.first)
let firstName = getFirstName(cars) //Ferrari FF
console.log(firstName) //Ferrari FF


// 练习3 ：使用帮助函数_average重构averageDollarValue,使用函数组合的方式实现
let _average = function (xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length
}
// let avarageDollarValue = function (cars) {
//     let dollars_values = fp.map(function (car) {
//         return car.dollar_value
//     }, cars)
//     return _average(dollars_values)
// }
// 取到所有元素的dollar_value
const getAllDollarVal = fp.map(fp.prop('dollar_value'))
//从右向左执行 先获取到所有元素的dollar_value，在计算平均值
let avarageDollarValue = fp.flowRight(_average, getAllDollarVal)
let averageVal = avarageDollarValue(cars)
console.log(averageVal) //790700

//  练习4：使用 flowRight  写一个 sanitizeNames ()函数，返回一个下划线连接的小写字符串，
// 把数组中的 name 转换为这种形式：例如：sanitizeNames(["Hello World"]) => ["hello.world"]
let _underscore = fp.replace(/\W+/g, '_')
// function sanitizeNames(arr) {
//     // map里先将空格替换成下滑线，再转小写
//     return fp.map(fp.flowRight(fp.toLower, _underscore))(arr)
// }
let sanitizeNames = fp.map(fp.flowRight(fp.toLower, _underscore))
console.log(sanitizeNames(['Hello Word'])) //[ 'hello_word' ]